home *** CD-ROM | disk | FTP | other *** search
-
- *
- *SATURATE VALUE IN A BETWEEN VALUES B AND C
- *A IS A VARIABLE
- *B AND C ARE VARIABLES OR CONSTANTS
- *
- SAT $MACRO A,B,C
- $VAR L,L1,L2,L3
- $ASG '$$LAB' TO L.S
- $ASG L.SV+3 TO L.SV GET A LABEL
- $ASG L.SV-2 TO L1.V
- $ASG L.SV-1 TO L2.V
- $ASG L.SV TO L3.V
- SOVM SET OVERFLOW MODE
- $IF C.SA&$UNDF
- LCAC :C: LOAD UPPER BOUND :C:
- $ELSE
- LAC :C:,0 LOAD UPPER BOUND :C:
- $ENDIF
- SUB :A:,0 COMPARE TO :A:
- BGEZ L$:L1.V: BRANCH IF :A:<=:C:
- $IF C.SA&$UNDF
- LCAC :C: RELOAD :C: AS VALUE
- $ELSE
- LAC :C:,0 RELOAD :C: AS VALUE
- $ENDIF
- B L$:L2.V: BRANCH TO CONTINUE
- L$:L1.V: EQU $ CHECK LOWER
- $IF B.SA&$UNDF
- LCAC :B: LOAD LOWER BOUND :B:
- $ELSE
- LAC :B:,0 LOAD LOWER BOUND :B:
- $ENDIF
- SUB :A:,0 COMPARE TO :A:
- BLEZ L$:L3.V: BRANCH IF :A:>:B:
- $IF B.SA&$UNDF
- LCAC :B: RELOAD :B: AS VALUE
- $ELSE
- LAC :B:,0 RELOAD :B: AS VALUE
- $ENDIF
- L$:L2.V: SACL :A:,0 RESTORE :A:
- L$:L3.V: ROVM CONTINUE
- $END